void Copy_Tree_To_Array(t_tree *tree, phydbl *x);
void Copy_Array_To_Tree(phydbl *x, t_tree *tree);
void Lnsrch_Generic(t_tree *tree, double fold, double *g, double *p, double *x,
		double *f, double stpmax, int *check, phydbl (*func)(t_tree *tree));
int How_Many_Free_Params(t_tree *tree);
//phydbl Lk_Prime(t_tree *tree, t_edge *b);
//phydbl Lk_Core_Prime(t_edge *b, t_tree *tree);
void Num_Derivative(t_tree *tree, phydbl stepsize,
		phydbl (*func)(t_tree *tree), phydbl *derivatives, int size_of_der);

void Print_Param_Trace(t_tree *tree, int its);
void BFGS_Full(t_tree *tree, double gtol, double step_size,
		double(*func)(), void (*dfunc)(), void (*lnsrch)(),int *failed);
// This method is for the 2011 publication
void Print_Lk_Landscape_Uni(t_tree *tree);
